package com.springboot.util;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class NumberUtils {

    /**
     * 数字添加千分位
     * <p>
     * 保留两位小数四舍五入
     *
     * @param value 数字
     */
    public static String getNumberWithThousands(BigDecimal value) {
        if (ObjectUtil.isEmpty(value) || BigDecimal.ZERO.equals(value)) {
            return "";
        }
        value = value.setScale(2, BigDecimal.ROUND_HALF_UP);
        return NumberUtil.decimalFormat(",###.##", value.doubleValue());
    }

    /**
     * 数字转中文map, 数字到百亿
     * <p>
     * 缺位补零
     *
     * @param value 数字
     * @param keys  数字 百亿位 -> 分位 对应的map的key, 如 {@link FundsCommonConstants#PDF_SH_LOWER_MAP_KEYS13}
     */
    public static Map<String, String> getNumberMap13(BigDecimal value, String keys) {
        return getNumberMap(value, keys, "00000000000.00");
    }

    /**
     * 数字转中文map, 数字到十亿
     * <p>
     * 缺位补零
     *
     * @param value 数字
     * @param keys  数字 十亿位 -> 分位 对应的map的key, 如 {@link FundsCommonConstants#PDF_RG_LOWER_MAP_KEYS}
     */
    public static Map<String, String> getNumberMap12(BigDecimal value, String keys) {
        return getNumberMap(value, keys, "0000000000.00");
    }

    /**
     * 数字转中文map
     * <p>
     * 缺位补零
     *
     * @param value 数字
     * @param keys  数字 十亿位 -> 分位 对应的map的key
     */
    public static Map<String, String> getNumberMap(BigDecimal value, String keys, String numberPattern) {
        if (ObjectUtil.isEmpty(value) || NumberUtil.isLess(value, BigDecimal.ZERO) || StrUtil.isBlank(keys) || StrUtil.isBlank(numberPattern)) {
            return Collections.emptyMap();
        }
        // 金额转大写
        value = value.setScale(2, BigDecimal.ROUND_HALF_UP);
        String valueStr = NumberUtil.decimalFormat(numberPattern, value.doubleValue());
        if (StrUtil.isBlank(valueStr)) {
            return Collections.emptyMap();
        }
        // 删除小数点
        valueStr = valueStr.replace(".", "");
        // 转map
        Map<String, String> map = new HashMap<>();
        for (int j = 0; j < keys.length(); j++) {
            String key = String.valueOf(keys.charAt(j));
            String v = String.valueOf(valueStr.charAt(j));
            map.put(key, v);
        }
        return map;
    }

    public static boolean isNum(String str) {
        Pattern pattern = Pattern.compile(".*[0-9].*");
        return pattern.matcher(str).matches();
    }
}
